import request from "@/utils/request";
import { Blob } from "buffer";

const USER_BASE_URL = "/core/manage/file";

const FileManageAPI = {
  // 获取文件列表
  getFileList(param: fileQuery) {
    const query = encodeURIComponent(JSON.stringify(param));
    return request<fileQuery, PageResult<resultFileInfo[]>>({
      url: `${USER_BASE_URL}/list?object=${query}`,
      method: "get",
    });
  },
  //文件下载
  downloadFile(fileUrl: string) {
    const query = encodeURIComponent(fileUrl);
    return request<string, downloadResult>({
      url: `${USER_BASE_URL}/download`,
      method: "post",
      data: {
        filePath: fileUrl,
      },
    });
  },
  // 文件作废
  voidFile(fileId: number) {
    return request<any, any>({
      url: `${USER_BASE_URL}/invalidate`,
      method: "post",
      data: { fileId },
    });
  },
  // 文件上传
  uploadFile(file: uploadFileInfo) {
    const formData = new FormData();
    formData.append("department", file.department);
    formData.append("effectiveTime", file.effectiveTime);
    formData.append("expiryTime ", file.expiryTime);
    formData.append("file ", file.file as File);
    formData.append("fileType ", file.fileType);

    formData.append("remark", file.remark);
    return request<FormData, any>({
      url: `${USER_BASE_URL}/upload`,
      method: "post",
      data: formData,
      headers: {
        "Content-Type": "multipart/form-data",
      },
    });
  },
};

export default FileManageAPI;

export interface fileQuery extends PageQuery {
  /** 文件名 */
  fileName?: string;
  /** 文件状态 */
  fileStatus?: number;
  /** 文件类型 */
  fileType?: number;
  /** 部门 */
  department?: string;
  /** 时间范围数组 */
  timeScopes?: string[];
}

export interface resultFileInfo {
  /** 创建人姓名 */
  createName: string;
  /** 创建时间 */
  createTime: string; // ISO 8601 格式的日期时间字符串
  /** 创建用户ID */
  createUser: number;
  /** 部门 */
  department: string;
  /** 生效时间 */
  effectiveTime: string; // ISO 8601 格式的日期时间字符串
  /** 失效时间 */
  expiryTime: string; // ISO 8601 格式的日期时间字符串
  /** 文件名 */
  fileName: string;
  /** 文件路径 */
  filePath: string;
  /** 文件大小 */
  fileSize: number;
  /** 文件状态 */
  fileStatus: number;
  /** 文件唯一标识符 */
  id: number;
  /** 是否删除（0表示未删除，1表示已删除） */
  isDelete: number;
  /** 修改人姓名 */
  modifyName: string;
  /** 修改时间 */
  modifyTime: string; // ISO 8601 格式的日期时间字符串
  /** 修改用户ID */
  modifyUser: number;
  /** 发布时间 */
  publishTime: string; // ISO 8601 格式的日期时间字符串
  /** 发布者 */
  publisher: string;
  /** 备注 */
  remark: string;
  /** 时间范围数组 */
  timeScopes: string[];
  /** 分页参数：当前页码 */
  pageNum: number;
  /** 分页参数：每页大小 */
  pageSize: number;
}

export interface uploadFileInfo {
  /** 文件名 */
  file: File | undefined;
  /** 文件路径 */
  fileType: string;
  /** 部门 */
  department: string;
  /** 备注 */
  remark: string;
  /** 生效时间 */
  effectiveTime: string;
  /** 失效时间 */
  expiryTime: string;
}

export interface downloadResult {
  description: "string"; // 文件描述
  file: "string"; // 文件路径
  filename: "string"; // 文件名
  inputStream: {}; // 文件流
  open: true; // 是否可读
  readable: true; // 是否可读
  uri: "string"; // 文件URI
  url: "string"; // 文件URL
}
